#!/usr/bin/env python3
# -*- coding: utf-8 -*-

"""
Java架构师学习助手 - 快速启动脚本
用于初始化学习环境和配置

使用方法:
python quick-start.py

作者: Java架构师学习助手
日期: 2025-09-29
"""

import os
import json
import shutil
from datetime import datetime, timedelta
from pathlib import Path
import calendar

class LearningSystemInitializer:
    """学习系统初始化器"""
    
    def __init__(self):
        self.base_dir = Path.cwd()
        self.templates_dir = self.base_dir / "templates"
        self.user_dir = self.base_dir.parent / "my_learning"
    
    def safe_add_months(self, date, months):
        """安全地增加月份"""
        year = date.year
        month = date.month + months
        
        # 处理月份溢出
        while month > 12:
            year += 1
            month -= 12
        while month < 1:
            year -= 1
            month += 12
        
        # 获取目标月份的最后一天
        last_day = calendar.monthrange(year, month)[1]
        day = min(date.day, last_day)
        
        return date.replace(year=year, month=month, day=day)
    
    def safe_add_days(self, date, days):
        """安全地增加天数"""
        return date + timedelta(days=days)
        
    def welcome(self):
        """欢迎界面"""
        print("=" * 60)
        print("Java架构师学习助手 - 快速启动")
        print("=" * 60)
        print("这个工具将帮助你初始化完整的学习环境")
        print("包括：进度跟踪、笔记模板、卡片生成器等")
        print()
        
    def get_user_info(self):
        """获取用户信息"""
        print("请提供你的基本信息：")
        
        name = input("姓名: ").strip() or "Java学习者"
        current_position = input("当前职位 (如：Java开发工程师): ").strip() or "Java开发工程师"
        
        try:
            work_experience = int(input("工作经验（年）: ").strip() or "0")
        except ValueError:
            work_experience = 0
            
        target_company = input("目标公司 (如：腾讯/华为/阿里/字节): ").strip() or "大厂"
        career_goal = input("职业目标 (如：高级Java架构师): ").strip() or "高级Java架构师"
        
        return {
            "name": name,
            "currentPosition": current_position,
            "workExperience": work_experience,
            "targetCompany": target_company,
            "careerGoal": career_goal
        }
    
    def create_directory_structure(self):
        """创建目录结构"""
        print("\n创建目录结构...")
        
        directories = [
            self.user_dir,
            self.user_dir / "study_notes",
            self.user_dir / "learning_materials",
            self.user_dir / "anki_cards",
            self.user_dir / "project_records",
            self.user_dir / "interview_prep",
            self.user_dir / "progress_reports"
        ]
        
        for directory in directories:
            directory.mkdir(parents=True, exist_ok=True)
            print(f"[完成] 创建目录: {directory}")
    
    def initialize_progress_file(self, user_info):
        """初始化进度跟踪文件"""
        print("\n初始化学习进度文件...")
        
        today = datetime.now()
        
        progress_data = {
            "personalInfo": user_info,
            "lastStudySession": {
                "date": today.strftime("%Y-%m-%d"),
                "topic": "环境初始化",
                "duration": 30,
                "completedSections": ["系统初始化"],
                "nextTarget": "技能评估",
                "studyMode": "初始化模式"
            },
            "skillAssessment": {
                "lastAssessmentDate": today.strftime("%Y-%m-%d"),
                "scores": self.get_default_skill_scores(),
                "overallScore": 0,
                "targetScore": 75
            },
            "learningPlan": {
                "currentPhase": "基础巩固",
                "totalPhases": ["基础巩固", "进阶提升", "架构实战", "面试准备"],
                "weeklyGoals": [
                    "完成技能评估",
                    "制定学习计划",
                    "开始第一个技术主题学习"
                ],
                "priority1Tasks": [
                    "Java核心技术评估",
                    "Spring框架基础学习",
                    "数据库基础巩固"
                ],
                "priority2Tasks": [
                    "分布式系统概念学习",
                    "微服务架构了解",
                    "容器化技术入门"
                ],
                "priority3Tasks": [
                    "大数据技术概览",
                    "云服务技术了解",
                    "专项技术选择"
                ],
                "completedTasks": ["学习系统初始化"]
            },
            "studyStatistics": {
                "totalStudyTime": 0.5,
                "weeklyStudyTime": 0.5,
                "studyStreak": 1,
                "lastStudyDate": today.strftime("%Y-%m-%d"),
                "dailyLog": {
                    today.strftime("%Y-%m-%d"): {
                        "duration": 30,
                        "topics": ["系统初始化"],
                        "achievements": ["完成学习环境搭建", "明确学习目标"]
                    }
                },
                "weeklyLog": {},
                "monthlyLog": {}
            },
            "resources": {
                "currentReading": [
                    "Java架构师学习指南",
                    "Spring官方文档"
                ],
                "completedBooks": [],
                "bookmarkDocs": [],
                "practiceProjects": [],
                "interviewQuestions": []
            },
            "ankiCards": {
                "totalCards": 0,
                "reviewToday": 0,
                "newCardsToday": 0,
                "lastExportDate": "",
                "cardsByTopic": {}
            },
            "achievements": {
                "studyMilestones": [
                    f"{today.strftime('%Y-%m-%d')}: 完成学习系统初始化"
                ],
                "skillBreakthroughs": [],
                "projectCompletions": [],
                "certifications": []
            },
            "nextReview": {
                "skillAssessment": self.safe_add_months(today, 3).strftime("%Y-%m-%d"),
                "learningPlan": self.safe_add_days(today, 7).strftime("%Y-%m-%d"),
                "progressReview": self.safe_add_months(today, 1).strftime("%Y-%m-%d")
            }
        }
        
        progress_file = self.user_dir / "learning-progress.json"
        with open(progress_file, 'w', encoding='utf-8') as f:
            json.dump(progress_data, f, ensure_ascii=False, indent=2)
        
        print(f"[完成] 创建进度文件: {progress_file}")
        
    def get_default_skill_scores(self):
        """获取默认技能分数"""
        return {
            "Java核心技术": {
                "current": 0,
                "target": 9,
                "subSkills": {
                    "Java基础": 0,
                    "JVM原理": 0,
                    "内存管理": 0,
                    "多线程编程": 0,
                    "并发编程": 0
                }
            },
            "框架技术": {
                "current": 0,
                "target": 8,
                "subSkills": {
                    "SpringBoot": 0,
                    "SpringCloud": 0,
                    "SpringSecurity": 0,
                    "MyBatis": 0,
                    "Dubbo": 0
                }
            },
            "数据库技术": {
                "current": 0,
                "target": 9,
                "subSkills": {
                    "MySQL": 0,
                    "Redis": 0,
                    "MongoDB": 0,
                    "数据库优化": 0
                }
            },
            "分布式系统": {
                "current": 0,
                "target": 8,
                "subSkills": {
                    "微服务架构": 0,
                    "分布式事务": 0,
                    "服务治理": 0,
                    "API网关": 0
                }
            },
            "容器化技术": {
                "current": 0,
                "target": 7,
                "subSkills": {
                    "Docker": 0,
                    "Kubernetes": 0,
                    "DevOps": 0
                }
            },
            "消息队列": {
                "current": 0,
                "target": 7,
                "subSkills": {
                    "Kafka": 0,
                    "RocketMQ": 0,
                    "消息中间件": 0
                }
            },
            "大数据技术": {
                "current": 0,
                "target": 4,
                "subSkills": {
                    "Hadoop": 0,
                    "Spark": 0,
                    "Flink": 0,
                    "实时计算": 0
                }
            },
            "云服务技术": {
                "current": 0,
                "target": 5,
                "subSkills": {
                    "AWS": 0,
                    "阿里云": 0,
                    "云原生": 0
                }
            },
            "专项技术": {
                "current": 0,
                "target": 3,
                "subSkills": {
                    "前端技术": 0,
                    "移动开发": 0,
                    "AI技术": 0
                }
            },
            "架构设计能力": {
                "current": 0,
                "target": 8,
                "subSkills": {
                    "系统架构设计": 0,
                    "性能优化": 0,
                    "安全架构": 0,
                    "技术选型": 0,
                    "系统集成": 0
                }
            },
            "软技能": {
                "current": 0,
                "target": 8,
                "subSkills": {
                    "沟通协调": 0,
                    "项目管理": 0,
                    "学习能力": 0,
                    "创新意识": 0,
                    "英文能力": 0
                }
            }
        }
    
    def copy_template_files(self):
        """复制模板文件"""
        print("\n复制模板文件...")
        
        # 需要复制的文件列表
        template_files = [
            "java-architect-tutor-prompt.md",
            "notion-templates.md",
            "notion-mcp-setup.md",
            "anki-card-generator.py",
            "usage-guide.md"
        ]
        
        for template_file in template_files:
            src = self.base_dir / template_file
            dst = self.user_dir / template_file
            
            if src.exists():
                shutil.copy2(src, dst)
                print(f"[完成] 复制文件: {template_file}")
            else:
                print(f"[警告] 未找到模板文件: {template_file}")
    
    def create_study_templates(self):
        """创建学习笔记模板文件"""
        print("\n创建学习笔记模板...")
        
        today = datetime.now()
        date_str = today.strftime("%Y-%m-%d")
        
        # 创建今日学习模板
        study_template = f"""# {date_str} 学习笔记

## 📚 学习目标
- [ ] 今日学习主题：_____
- [ ] 预计学习时间：___小时
- [ ] 学习资料：_____

## 🎯 学习内容

### 核心概念
> 记录今天学习的核心概念和定义

### 重点知识
1. **知识点1**
   - 详细说明：
   - 实例代码：
   ```java
   // 示例代码
   ```

2. **知识点2**
   - 详细说明：
   - 实例代码：
   ```java
   // 示例代码
   ```

### 难点分析
- **难点1**：
  - 问题描述：
  - 解决方案：
  - 参考资料：

## 🛠️ 实践练习

### 代码实践
```java
// 今日练习代码
```

### 练习总结
- 遇到的问题：
- 解决过程：
- 收获体会：

## 🤔 问题记录

### 疑问点
1. 
2. 
3. 

### 待深入研究
- [ ] 
- [ ] 
- [ ] 

## 📝 学习总结

### 今日收获
1. 
2. 
3. 

### 掌握程度 (1-10分)
- 理论理解：___/10
- 实际应用：___/10
- 整体掌握：___/10

### 明日计划
- [ ] 
- [ ] 
- [ ] 

## 🔗 相关资源
- 学习资料：
- 参考文档：
- 视频教程：

---
*创建时间：{today.strftime('%Y-%m-%d %H:%M')}*
*学习者：待填写*
"""
        
        # 保存模板文件
        template_file = self.user_dir / "study_notes" / f"{date_str}_学习笔记.md"
        with open(template_file, 'w', encoding='utf-8') as f:
            f.write(study_template)
        
        print(f"[完成] 创建学习模板: {template_file}")
        
        # 创建学习资料索引文件
        materials_index = f"""# 学习资料索引

## 📚 资料清单

### 正在学习
- [ ] 资料名称1 - 进度：___% - 预计完成时间：____
- [ ] 资料名称2 - 进度：___% - 预计完成时间：____

### 计划学习
- [ ] 资料名称1 - 优先级：高/中/低 - 预计开始时间：____
- [ ] 资料名称2 - 优先级：高/中/低 - 预计开始时间：____

### 已完成
- [x] 资料名称1 - 完成时间：____-__-__ - 评价：★★★★★

## 📁 资料分类

### 书籍资料
- 《Java核心技术》
- 《Spring实战》
- 《设计模式之美》

### 视频课程
- Java架构师课程
- Spring Boot实战
- 分布式系统设计

### 文章博客
- 优质技术博客收藏
- 官方文档链接
- 技术论文

### 实战项目
- 项目1：描述___，技术栈___
- 项目2：描述___，技术栈___

## 🎯 学习计划定制

### 根据当前资料制定学习计划
1. **第一阶段**（___周）：基础巩固
   - 学习资料：
   - 学习目标：
   - 预期收获：

2. **第二阶段**（___周）：进阶提升
   - 学习资料：
   - 学习目标：
   - 预期收获：

3. **第三阶段**（___周）：实战应用
   - 学习资料：
   - 学习目标：
   - 预期收获：

---
*最后更新：{today.strftime('%Y-%m-%d %H:%M')}*
"""
        
        materials_file = self.user_dir / "learning_materials" / "学习资料索引.md"
        with open(materials_file, 'w', encoding='utf-8') as f:
            f.write(materials_index)
        
        print(f"[完成] 创建资料索引: {materials_file}")
    
    def create_readme(self, user_info):
        """创建个人学习README"""
        print("\n创建个人学习README...")
        
        readme_content = f"""# {user_info['name']}的Java架构师学习之路

## 个人信息
- **姓名**: {user_info['name']}
- **当前职位**: {user_info['currentPosition']}
- **工作经验**: {user_info['workExperience']}年
- **目标公司**: {user_info['targetCompany']}
- **职业目标**: {user_info['careerGoal']}

## 学习目标
- [ ] 完成技能全面评估
- [ ] 制定个性化学习路径
- [ ] 掌握Java架构师核心技能
- [ ] 具备大厂面试竞争力
- [ ] 成功转型为{user_info['careerGoal']}

## 文件结构
```
my_learning/
├── learning-progress.json           # 学习进度跟踪
├── java-architect-tutor-prompt.md   # 学习助手提示词
├── notion-templates.md              # Notion笔记模板
├── notion-mcp-setup.md             # Notion MCP工具配置指南
├── anki-card-generator.py          # Anki卡片生成器
├── usage-guide.md                  # 使用指南
├── study_notes/                    # 学习笔记目录
│   ├── 2025-01-01_学习笔记.md      # 按日期创建的学习模板
│   └── 2025-01-02_学习笔记.md      # 每日学习记录
├── learning_materials/             # 学习资料目录
│   ├── 学习资料索引.md              # 资料管理和计划定制
│   ├── 《Java核心技术》.pdf         # 书籍资料
│   ├── Spring实战视频.mp4          # 视频课程
│   └── 技术文章收藏.md             # 文章博客
├── anki_cards/                     # Anki卡片目录
├── project_records/                # 项目实战记录
├── interview_prep/                 # 面试准备资料
└── progress_reports/               # 进度报告目录
```

## 快速开始

### 1. 技能评估
运行技能评估，了解当前水平：
```bash
# 参考 ../big_thing/分公司/ 目录下的评估表进行自我评估
python skill_assessment.py
```

### 2. 启动学习助手
在Cursor中使用学习助手：
```
我想开始Java架构师学习计划，请根据我的进度文件制定今天的学习计划。
```

### 3. 开始学习
说"开始学习"时，系统会自动为你创建：
- **今日学习模板**：`study_notes/2025-01-01_学习笔记.md`
- **学习资料索引**：`learning_materials/学习资料索引.md`

### 4. 学习资料管理
在 `learning_materials/` 目录中：
- 上传你的学习资料（书籍、视频、文章等）
- 使用"学习资料索引.md"管理学习进度
- 系统会根据你的资料提供定制化学习建议

### 5. 智能学习笔记
学习助手会自动使用Notion MCP工具创建结构化学习笔记，包括：
- 自动填充学习信息和技术标签
- 创建与之前学习内容的关联
- 实时同步学习进度到数据库

### 6. 生成复习卡片
使用Anki卡片生成器：
```bash
python anki-card-generator.py --interactive
```

## 学习里程碑
- [ ] **第1个月**: 完成Java核心技术巩固
- [ ] **第2-3个月**: 掌握Spring框架和数据库技术
- [ ] **第4-6个月**: 学习分布式系统和微服务架构
- [ ] **第7-9个月**: 实战项目和架构设计能力
- [ ] **第10-12个月**: 面试准备和求职

## 学习记录
### {datetime.now().strftime('%Y年%m月')}
- [完成] {datetime.now().strftime('%m-%d')}: 完成学习系统初始化
- [待完成] 技能评估和学习计划制定

---

*最后更新: {datetime.now().strftime('%Y-%m-%d %H:%M')}*
*坚持每日学习，记录每次进步！*
"""
        
        readme_file = self.user_dir / "README.md"
        with open(readme_file, 'w', encoding='utf-8') as f:
            f.write(readme_content)
        
        print(f"[完成] 创建README: {readme_file}")
    
    def create_scripts(self):
        """创建常用脚本"""
        print("\n创建快捷脚本...")
        
        # 创建技能评估脚本
        skill_assessment_script = """#!/usr/bin/env python3
# 技能评估脚本
import json
from datetime import datetime

def update_skill_score():
    with open('learning-progress.json', 'r', encoding='utf-8') as f:
        data = json.load(f)
    
    print("技能评估工具")
    print("请对以下技能进行评分（0-10分）：")
    
    for domain, info in data['skillAssessment']['scores'].items():
        print(f"\\n{domain} (当前: {info['current']}, 目标: {info['target']}):")
        for skill, current_score in info['subSkills'].items():
            try:
                new_score = float(input(f"  {skill} (当前: {current_score}): ") or current_score)
                info['subSkills'][skill] = new_score
            except ValueError:
                pass
        
        # 计算平均分
        avg_score = sum(info['subSkills'].values()) / len(info['subSkills'])
        info['current'] = round(avg_score, 1)
    
    # 更新评估日期
    data['skillAssessment']['lastAssessmentDate'] = datetime.now().strftime('%Y-%m-%d')
    
    # 保存文件
    with open('learning-progress.json', 'w', encoding='utf-8') as f:
        json.dump(data, f, ensure_ascii=False, indent=2)
    
    print("技能评估已更新！")

if __name__ == '__main__':
    update_skill_score()
"""
        
        script_file = self.user_dir / "skill_assessment.py"
        with open(script_file, 'w', encoding='utf-8') as f:
            f.write(skill_assessment_script)
        
        print(f"[完成] 创建技能评估脚本: {script_file}")
        
        # 创建每日学习模板生成脚本
        daily_template_script = """#!/usr/bin/env python3
# 每日学习模板生成脚本
from datetime import datetime
from pathlib import Path

def create_daily_template():
    today = datetime.now()
    date_str = today.strftime("%Y-%m-%d")
    
    study_notes_dir = Path("study_notes")
    template_file = study_notes_dir / f"{date_str}_学习笔记.md"
    
    if template_file.exists():
        print(f"今日学习模板已存在: {template_file}")
        return
    
    study_template = f\"\"\"# {date_str} 学习笔记

## 📚 学习目标
- [ ] 今日学习主题：_____
- [ ] 预计学习时间：___小时
- [ ] 学习资料：_____

## 🎯 学习内容

### 核心概念
> 记录今天学习的核心概念和定义

### 重点知识
1. **知识点1**
   - 详细说明：
   - 实例代码：
   ```java
   // 示例代码
   ```

2. **知识点2**
   - 详细说明：
   - 实例代码：
   ```java
   // 示例代码
   ```

### 难点分析
- **难点1**：
  - 问题描述：
  - 解决方案：
  - 参考资料：

## 🛠️ 实践练习

### 代码实践
```java
// 今日练习代码
```

### 练习总结
- 遇到的问题：
- 解决过程：
- 收获体会：

## 🤔 问题记录

### 疑问点
1. 
2. 
3. 

### 待深入研究
- [ ] 
- [ ] 
- [ ] 

## 📝 学习总结

### 今日收获
1. 
2. 
3. 

### 掌握程度 (1-10分)
- 理论理解：___/10
- 实际应用：___/10
- 整体掌握：___/10

### 明日计划
- [ ] 
- [ ] 
- [ ] 

## 🔗 相关资源
- 学习资料：
- 参考文档：
- 视频教程：

---
*创建时间：{today.strftime('%Y-%m-%d %H:%M')}*
*学习者：待填写*
\"\"\"
    
    with open(template_file, 'w', encoding='utf-8') as f:
        f.write(study_template)
    
    print(f"✅ 已创建今日学习模板: {template_file}")
    print("现在可以开始学习了！")

if __name__ == '__main__':
    create_daily_template()
"""
        
        daily_script_file = self.user_dir / "create_daily_template.py"
        with open(daily_script_file, 'w', encoding='utf-8') as f:
            f.write(daily_template_script)
        
        print(f"[完成] 创建每日模板生成脚本: {daily_script_file}")
        
        # 创建进度报告脚本
        progress_report_script = """#!/usr/bin/env python3
# 学习进度报告生成器
import json
from datetime import datetime

def generate_progress_report():
    with open('learning-progress.json', 'r', encoding='utf-8') as f:
        data = json.load(f)
    
    report = f\"\"\"# 学习进度报告
    
## 基本信息
- 姓名: {data['personalInfo']['name']}
- 报告日期: {datetime.now().strftime('%Y-%m-%d')}
- 学习阶段: {data['learningPlan']['currentPhase']}

## 技能评估概览
\"\"\"
    
    for domain, info in data['skillAssessment']['scores'].items():
        progress = (info['current'] / info['target']) * 100
        report += f"- {domain}: {info['current']}/{info['target']} ({progress:.1f}%)\\n"
    
    report += f\"\"\"
## 学习统计
- 总学习时间: {data['studyStatistics']['totalStudyTime']}小时
- 本周学习时间: {data['studyStatistics']['weeklyStudyTime']}小时
- 连续学习天数: {data['studyStatistics']['studyStreak']}天

## 已完成任务
\"\"\"
    
    for task in data['learningPlan']['completedTasks']:
        report += f"- [完成] {task}\\n"
    
    # 保存报告
    report_file = f"progress_reports/progress_report_{datetime.now().strftime('%Y%m%d')}.md"
    with open(report_file, 'w', encoding='utf-8') as f:
        f.write(report)
    
    print(f"进度报告已生成: {report_file}")

if __name__ == '__main__':
    generate_progress_report()
"""
        
        report_script_file = self.user_dir / "generate_report.py"
        with open(report_script_file, 'w', encoding='utf-8') as f:
            f.write(progress_report_script)
        
        print(f"[完成] 创建进度报告脚本: {report_script_file}")
    
    def check_notion_mcp_status(self):
        """检查Notion MCP工具配置状态"""
        print("\n检查Notion MCP工具配置...")
        
        # 这里可以添加更详细的检查逻辑
        # 比如检查环境变量、配置文件等
        print("[信息] 请确保已在Cursor IDE中配置Notion MCP工具")
        print("[信息] 详细配置步骤请参考 notion-mcp-setup.md")
        print("[信息] 配置完成后，助手将能够自动创建Notion学习笔记")
    
    def show_next_steps(self, user_info):
        """显示后续步骤"""
        print("\n初始化完成！")
        print("=" * 60)
        print(f"欢迎 {user_info['name']} 开始Java架构师学习之旅！")
        print()
        print("接下来的步骤：")
        print("1. 配置Notion MCP工具：参考 ../my_learning/notion-mcp-setup.md")
        print("2. 进入学习目录：cd ../my_learning")
        print("3. 运行技能评估：python skill_assessment.py")
        print("4. 阅读使用指南：usage-guide.md")
        print("5. 在Cursor中加载学习助手提示词")
        print("6. 在Notion中导入笔记模板")
        print("7. 开始第一个学习主题")
        print()
        print("小贴士：")
        print("- 优先配置Notion MCP工具，实现自动化学习记录")
        print("- 每天坚持学习1-2小时")
        print("- 学习时直接让助手在Notion中创建笔记")
        print("- 定期生成Anki卡片进行复习")
        print("- 每周更新学习进度")
        print()
        print("相关资源：")
        print("- 学习文件夹: ../my_learning/")
        print("- 进度跟踪文件: ../my_learning/learning-progress.json")
        print("- 个人README: ../my_learning/README.md")
        print("- Notion MCP配置: ../my_learning/notion-mcp-setup.md")
        print()
        print("祝学习愉快，早日实现职业目标！")
        print("=" * 60)
    
    def run(self):
        """运行初始化流程"""
        try:
            self.welcome()
            user_info = self.get_user_info()
            
            self.create_directory_structure()
            self.initialize_progress_file(user_info)
            self.copy_template_files()
            self.create_study_templates()
            self.create_readme(user_info)
            self.create_scripts()
            self.check_notion_mcp_status()
            
            self.show_next_steps(user_info)
            
        except KeyboardInterrupt:
            print("\n\n初始化被中断。")
            return False
        except Exception as e:
            print(f"\n初始化过程中发生错误: {e}")
            return False
        
        return True

def main():
    """主函数"""
    initializer = LearningSystemInitializer()
    success = initializer.run()
    
    if success:
        input("\n按回车键退出...")

if __name__ == '__main__':
    main()
